"""Header_Information
------------------------------------
    File_Name: config
    Author: RR9
    Date: 2024/10/22
    Description: 日志记录
------------------------------------
"""
from loguru import logger

"""日志loguru
⚠️：首次创建后，之后使用只需绑定到这个实例即可
1. 定义了一个app.log 用户记录所有日志，使用方式：
    log = add_module_logger('app','logs/app.log')
    log.debug("xxx")
    log.info("xxx")
    其他模块使用：log = logger.bind(module="app")
    ...
2. 定义一个add_module_logger,用于将日志输出到指定日志文件
    ob1 = add_module_logger('ob1','logs/ob1.log')
    ob2 = add_module_logger('ob2','logs/ob2.log')
    # 使用
    ob1.info("xxx") # 将记录到ob1.log 文件中
    ob2.info("xxx") # 将记录到ob2.log 文件中
    其他模块使用：log = logger.bind(module="ob1")
"""
format_log = ("{time:YYYY-MM-DD HH:mm:ss.SSS} |"
              "<level>{level:8}</level>| {name} : "
              "{module}:{line:4} | "
              "<cyan>[{extra[module]}]</cyan> |"
              "<level>{message}</level>"
              )


# 创建模块特定的日志处理器
def add_module_logger(module_name, log_file):
    """记录到不同文件
    默认100MB
    """

    # 该函数只允许来自特定模块的日志通过
    def module_filter(record):
        # 全局使用app记录所有日志
        if module_name not in ["app", None]:
            return record["extra"].get("module") == module_name
        return True
        # 为模块添加日志处理器

    logger.add(log_file, level="INFO", format=format_log, filter=module_filter, rotation="100 MB")

    # 返回一个绑定到该模块的logger（用于添加额外的上下文信息）
    return logger.bind(module=module_name)
